home *** CD-ROM | disk | FTP | other *** search
- /*
- TRACELIB v1.0 © 1995 Robert Weiß
-
- Die TRACELIB simuliert mit Hilfe der Trace-Funktion der
- Prozessoren 680x0 den Address-Error bei
- Wort-/Langwortzugriffen auf ungerade Addressen. Dies stellt
- natürlich keinen vollständigen Ersatz eines echten 68000er
- STs dar, da das ganze ziemlich bremst. Man kann sich ja
- leicht ausrechnen, daß für den Test pro Befehl nun 50-100
- Befehle ausgeführt werden. Die LIB ist vor allem dafür
- gedacht, das man, wenn man die kritische Stelle ungefähr
- kennt, kurzzeitig Tracen kann, nicht aber für evnt_multi()
- etc..
-
- Tracelib ist FREEWARE, darf aber nur in unveränderter Form
- weitergegeben werden. Die kommerzielle Benutzung (Verkauf,
- PD-Disketten) ist untersagt.
-
- Zur Benutzung der Funktionen Trace_ON() und Trace_OFF() wird
- TempleMon Version >= 2.4 benötigt. Alle anderen brauchen
- Version >= 2.00
-
- Die Trace-Funktion kann nach Trace_Init() entweder im
- TempleMon selbst durch Aktivieren der Trace-Bits mit 't+',
- oder im Programm durch Trace_ON() aktiviert werden.
-
- Die bei jedem Befehl angesprungene Routine prüft als erstet,
- ob der Befehl selbst in einem in der Speicherliste
- eingetragenen Bereich liegt. Dadurch kann man andere
- residente Programme vom Test ausschließen. Ist die
- Speicherliste leer (nach Trace_Init() ist sie es), wird
- jeder Befehl getestet, egal ob RAM, ROM, ROM-Modul, etc..
-
- Getestet wird dann, ob ein Wort- oder Langwortzugriff auf
- eine ungerade Speicheraddresse erfolgt und löst
- gegebenenfalls einen Address-Error aus, wodurch man sich
- prompt im TempleMon befindet.
- */
-
- #ifndef __TRACELIB__
- #define __TRACELIB__
-
- /* Definition eines Speicherblocks */
-
- typedef struct
- {
- void *blk; /* Addresse des Speicherblocks */
- long len; /* Länge in Bytes */
- } MEMBLK;
-
- /* Statisch in TRACELIB.O angelegt */
- /* auf Überlauf achten!!! */
-
- extern MEMBLK BlkList[500];
-
- /* Trace_Init() initialisiert den Speicherarray und */
- /* meldet die Traceroutine bei TempleMon an. Ab diesem */
- /* Zeitpunkt kann die Traceroutine auch manuell im */
- /* TempleMon per 't+' aktiviert werden. */
- /* Return: ==0 Fehler beim anmelden (TempleMon da?) */
- /* !=0 Alles OK */
-
- int Trace_Init (void);
-
- /* Trace_Term() meldet die Traceroutine bei TempleMon */
- /* wieder ab. Muß unbedingt vor Programmterminierung */
- /* geschehen, da sonst bei aktivem Trace in freie */
- /* Speicherbereiche gesprungen wird. */
- /* Return: ==0 Fehler beim abmelden (TempleMon da?) */
- /* !=0 Alles OK */
-
- int Trace_Term (void);
-
- /* Trace_ON() schaltet das Trace-Bit im SR an. Bei */
- /* Prozessoren >68000 wird T1 gesetzt: Trace bei jedem */
- /* Befehl. Bewirkt das selbe wie manuell: */
- /* 't+' CR 'g' CR 'a' */
- /* Return: ==0 Fehler beim abmelden (TempleMon da?) */
- /* !=0 Alles OK */
-
- int Trace_ON (void);
-
- /* Trace_OFF() schaltet das Trace-Bit im SR aus. Bei */
- /* Prozessoren >68000 werden T1 und T0 auf 0 gesetzt. */
- /* Bewirkt das selbe wie manuell: */
- /* 't-' CR 'g' CR */
- /* Return: ==0 Fehler beim abmelden (TempleMon da?) */
- /* !=0 Alles OK */
-
- int Trace_OFF (void);
-
- /* Traceblk_Ins(blk, len) fügt den Speicherblock mit */
- /* Addresse blk und Länge len in die interne Speicher- */
- /* liste ein. Maximal können 500 Speicherblöcke */
- /* von der Tracelib verwaltet werden. */
- /* Traceblk_Ins() sollte einmal beim Programmstart zum */
- /* Einfügen der Programmsegmente und dann bei jeder */
- /* Speicheranforderung durch M(x)alloc() aufgerufen */
- /* werden. */
-
- void Traceblk_Ins (void *blk, long len);
-
- /* Traceblk_Chg(blk, newlen) ändert den Speicherblock */
- /* mit Addresse blk und die neue Länge newlen */
- /* Traceblk_Ins() sollte bei jedem Mshrink() */
- /* aufgerufen werden. */
-
- void Traceblk_Chg (void *blk, long newlen);
-
- /* Traceblk_Del(blk) entfernt den Speicherblock mit */
- /* Addresse blk aus der Liste. */
- /* Traceblk_Del() sollte bei jedem Mfree() */
- /* aufgerufen werden. */
-
- void Traceblk_Del (void *blk);
-
- /* breakpoint() zeigt auf... */
- /* breakpoint: illegal */
- /* rts */
- /* Damit kann man in den TempleMon springen und feine */
- /* Sachen machen. */
-
- void breakpoint (void);
-
- #endif /* __TRACELIB__ */